function MVVM(options) {
    //options : Vue的配置项
    //this:vm实例对象
    this.$options = options;
    //data:配置项中的data数据
    var data = this._data = this.$options.data;
    //this劫持 me:vm实例对象
    var me = this;
    //keys : 将data的所有可枚举属性提取出来组成一个数组
    //key: data中的一个个可枚举属性
    Object.keys(data).forEach(function(key) {
        //me:鸡肋闭包!!!!!!!
        me._proxy(key);
    });

    //数据劫持
    observe(data, this);

    //模板解析
    this.$compile = new Compile(options.el || document.body, this)
}

MVVM.prototype = {
    //数据代理
    _proxy: function(key) {
        //this劫持  me:vm实例对象
        var me = this;
        //给vm新增属性
        Object.defineProperty(me, key, {
            configurable: false,
            enumerable: true,
            get: function proxyGetter() {
                return me._data[key];
            },
            set: function proxySetter(newVal) {
                me._data[key] = newVal;
            }
        });
    }
};